package com.yujiahao.bigdata.rdd.action

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
    TODO 行动算子 collect行动算子。
      1、采集数据，会将数据从Excutor端采集回Driver，形成数据集合
      2、collect会按照分区顺序进行顺序采集，collect将数据从Executor端拉取到Driver端，可能会导致内存溢出，此时使用其他算子
      3、尽量不用，如果数据量小的话还可以考虑
 */
object Spark01_Action_Collect {
  def main(args: Array[String]): Unit = {
    //TODO 1、获得Spark环境的连接
    // 参数解读：setAppName("当前执行程序的名字").setMaster("当前的环境")
    // 分布式环境的基本架构为 主 - 从
    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)
    //TODO 3、业务逻辑

    val rdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4), 2)
    //从Executor端将数据按照分区采集到Driver端
    val array: Array[Int] = rdd.collect()
    println(array.mkString(" "))
    //TODO 2、关闭Spark环境的连接
    sc.stop()

  }

}
